package LinkedList;

public class _203_RemoveLinkedListElements {
    public ListNode removeElements(ListNode head, int val) {
        if(head==null) return null;
        ListNode prev = null;
        while(head!=null && head.val==val){
            head = head.next;
        }
        ListNode p = head;
        while(p!=null){
            if(p.val==val){
                //若相等则P不增加，避免出现多个重复数字([1,2,2,1]中去除2的情况)
                if(p.next!=null) {
                    p.val = p.next.val;
                    p.next = p.next.next;
                }else{
                    //最后一个值，则倒数第二个值下一值为空
                    prev.next=null;
                    break;
                }
            }else{
                //若不相等，则可设置prev的值，并进入下一次判断
                prev = p;
                p = p.next;
            }
        }
        return head;
    }
}
